{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6e6776a3",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7b1deb26",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.datasets import make_classification\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, roc_curve, auc\n",
    "import statsmodels.api as sm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f0760de3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置中文显示\n",
    "plt.rcParams[\"font.family\"] = [\"SimHei\"]\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11207f09",
   "metadata": {},
   "source": [
    "数据准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2371b9fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 生成模拟数据\n",
    "X, y = make_classification(\n",
    "    n_samples=200,    # 样本数量\n",
    "    n_features=2,     # 特征数量\n",
    "    n_informative=2,  # 有效特征数量\n",
    "    n_redundant=0,    # 冗余特征数量\n",
    "    n_classes=2,      # 类别数量\n",
    "    random_state=42   # 随机种子，保证结果可重现\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c56acac3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "495b13a3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1. 使用sklearn实现逻辑回归（黑盒方法）\n",
    "# 创建并训练模型\n",
    "logreg_sklearn = LogisticRegression()\n",
    "logreg_sklearn.fit(X_train, y_train)\n",
    "\n",
    "# 预测\n",
    "y_pred_sklearn = logreg_sklearn.predict(X_test)\n",
    "y_prob_sklearn = logreg_sklearn.predict_proba(X_test)[:, 1]\n",
    "\n",
    "# 评估模型\n",
    "accuracy_sklearn = accuracy_score(y_test, y_pred_sklearn)\n",
    "conf_matrix_sklearn = confusion_matrix(y_test, y_pred_sklearn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8193da3a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2. 使用statsmodels实现逻辑回归（GLM方法）\n",
    "# 添加常数列，对应截距项\n",
    "X_train_sm = sm.add_constant(X_train)\n",
    "X_test_sm = sm.add_constant(X_test)\n",
    "\n",
    "# 创建并训练模型\n",
    "logreg_sm = sm.GLM(y_train, X_train_sm, family=sm.families.Binomial())\n",
    "result_sm = logreg_sm.fit()\n",
    "\n",
    "# 预测\n",
    "y_prob_sm = result_sm.predict(X_test_sm)\n",
    "y_pred_sm = (y_prob_sm > 0.5).astype(int)\n",
    "\n",
    "# 评估模型\n",
    "accuracy_sm = accuracy_score(y_test, y_pred_sm)\n",
    "conf_matrix_sm = confusion_matrix(y_test, y_pred_sm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d6cef9f8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGwCAYAAABfKeoBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcgtJREFUeJztnQe4FOXZ/h+EIyU06QIHERQ/scRoFCsqShFBRCN/wN5IMCb2gkk+wajBDokkEex+YlTsEUSCFFFALEFFVFQQBJGiNEE4wP6v+x3ec2bnzOzO7E7f+3ddy56dmd2deZndufd57vd5amQymYwQQgghhJC87JZ/E0IIIYQQAiicCCGEEEJcQuFECCGEEOISCidCCCGEEJdQOBFCCCGEuITCiRBCCCHEJRROhBBCCCEuoXAihBBCCHEJhRMhJFTWrl0r3333ne26DRs2hL4/hBDiBQonQogn0Gxg+/btrm4VFRWyadOmrOdPnz5d9tprL1uR9Otf/1q6desmO3bscHz/n376Sd2vWLFC7r77btm2bZts3rxZ7Rf473//K19++WXe4/jHP/4h7777rvjBN998U/n3ypUrZcyYMQW9zsknnyx33HGHL/tECAkGCidCiCceeughKSsrc3XbfffdpUGDBpViRwueww47TBo2bJj1uhs3bpSXX35ZTj31VKlZs6bte//4449y4IEHyrRp02TZsmVy3XXXyc6dO+X222+XCy+8UG1z3333yaBBg1wJpw8//FD9/eabb0qNGjUcb0cddZTj63z00UfSoUMHef3119Xj1atXy+9+9zuZMmWKeOHTTz+VqVOnStOmTT09jxASLrVCfj9CSMKBGGrUqFFWlAU8/vjjShTdeOONlcsQBdq6davUqVOnctlXX30l//M//1Ptdf/5z39Kx44d5YorrlCPn332WenTp4/UrVu3cpuf/exn8r//+78yZMgQefLJJ9UyRJzGjh2rRBdAFOn88893dRy77Wb8dqxdu7YSLGvWrKm23f/93//Jgw8+6Pg6EG1t27aVE088UT0+6KCD5Fe/+pVcddVV8t5776nXthNJEIe1atVSwgzce++90rhxY+natassWbIka3uIQ0Tv8Jx99tkn77ERQoKDwokQ4gktNurXr5+1/KWXXpIjjjii2nJEnMDDDz+sRMjChQulXr160qtXL7Uc6ba9995b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",
      "text/plain": [
       "<Figure size 1500x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 3. 可视化\n",
    "\n",
    "# 3.1 原始数据分布\n",
    "plt.figure(figsize=(15, 10))\n",
    "plt.subplot(2, 2, 1)\n",
    "plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], c='blue', marker='o', label='类别0')\n",
    "plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], c='red', marker='x', label='类别1')\n",
    "plt.title('原始数据分布')\n",
    "plt.xlabel('特征1')\n",
    "plt.ylabel('特征2')\n",
    "plt.legend()\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2468ff9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 3.2 决策边界（sklearn模型）\n",
    "plt.subplot(2, 2, 2)\n",
    "h = 0.02\n",
    "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
    "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
    "\n",
    "Z = logreg_sklearn.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "Z = Z.reshape(xx.shape)\n",
    "plt.contourf(xx, yy, Z, alpha=0.4)\n",
    "plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], c='blue', marker='o', label='类别0')\n",
    "plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], c='red', marker='x', label='类别1')\n",
    "plt.title(f'sklearn逻辑回归决策边界 (准确率: {accuracy_sklearn:.2f})')\n",
    "plt.xlabel('特征1')\n",
    "plt.ylabel('特征2')\n",
    "plt.legend()\n",
    "plt.grid(True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0c687d43",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATEAAAD6CAYAAADJPXCrAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAS6tJREFUeJztnQd4VNXTxoeEEggh1NAJvTep8hcQEOmogKKACALSO4pKR0AUKSKCNClSFAQp0pGuiDQp0jvSpIdQQgK53/MO31nubjZbki13s/N7nkvYu+3s3b1z58yZeSeZpmkaCYIg+CgB3h6AIAhCYhAjJgiCTyNGTBAEn0aMmCAIPo0YMUEQfBoxYoIg+DRixARB8GnEiAmC4NOIERN8hqdPn8bZJ7naghgxwaMcP36cli5darp95MgRmjlzplUDpefevXuUL18+WrRokdn+IUOGUFhYGN//77//0s2bN50az7Fjx+jrr7+m6Ohohx6/YMECunTpklVjOmfOHH49wbOIERM8yooVK6hdu3am2zt27KAPPvjA7vNgIB4/fkw1a9Y02585c2Z68uQJpUuXjnr16kVvvvkmxcTExHl+sWLFqH///nH279+/n/r06UOxsbF2xxAVFUVt27aNY0gBng8D17hxY7p//77d1xJchxgxP2br1q2ULFky0waD8Prrr7O3pFi+fDmVKFGCgoKCqGzZsrRlyxaz14AH89FHH/Fz06dPT126dOGTPT7SpEnDj1PgdQMDA3mLD7zemDFjaMKECZQxY0b2uhShoaGUOnVq/v+0adN4HNa8MbwPNktSpEjBf1OlShXv++P9/vrrLzZSMJiVKlXiY3T69Gn2JFetWkWbN2+md999l0qXLs2GecOGDbRy5Uo6evRovK8ruIbkLnodwYf54YcfqEiRInTu3DkaNmwYVatWjU6ePMlTI3g2b7/9No0fP56mTJlCjRo1okOHDlGBAgX4uT169GBDh/tgiLp160YpU6akiRMnWn0vZTCd4fPPP+f3a9myJc2dO5f69u1Lf/75JxUuXJjvx1T0+vXrdODAASpTpgy98847POauXbuaXgNjCwiIe83GWHGffkyXL1+m4cOH07fffsv34zjUqlWLPTwYu9dee43fs2LFitSgQQM+fsmTJze9xuDBg/kvDN77779PxYsXd+rzCk4CFQvBP9myZQui4tqe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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 3.3 ROC曲线\n",
    "plt.subplot(2, 2, 3)\n",
    "fpr_sklearn, tpr_sklearn, _ = roc_curve(y_test, y_prob_sklearn)\n",
    "fpr_sm, tpr_sm, _ = roc_curve(y_test, y_prob_sm)\n",
    "roc_auc_sklearn = auc(fpr_sklearn, tpr_sklearn)\n",
    "roc_auc_sm = auc(fpr_sm, tpr_sm)\n",
    "\n",
    "plt.plot(fpr_sklearn, tpr_sklearn, color='darkorange', lw=2, \n",
    "         label=f'sklearn ROC (AUC = {roc_auc_sklearn:.2f})')\n",
    "plt.plot(fpr_sm, tpr_sm, color='green', lw=2, \n",
    "         label=f'statsmodels ROC (AUC = {roc_auc_sm:.2f})')\n",
    "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n",
    "plt.xlim([0.0, 1.0])\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('假阳性率 (FPR)')\n",
    "plt.ylabel('真阳性率 (TPR)')\n",
    "plt.title('ROC曲线比较')\n",
    "plt.legend(loc=\"lower right\")\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "4d7df657",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 3.4 概率分布\n",
    "plt.subplot(2, 2, 4)\n",
    "plt.hist(y_prob_sklearn[y_test == 0], bins=20, alpha=0.5, label='类别0预测概率')\n",
    "plt.hist(y_prob_sklearn[y_test == 1], bins=20, alpha=0.5, label='类别1预测概率')\n",
    "plt.axvline(x=0.5, color='r', linestyle='--', label='决策阈值')\n",
    "plt.title('预测概率分布')\n",
    "plt.xlabel('预测概率')\n",
    "plt.ylabel('样本数量')\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "1ae023a7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "===== sklearn 逻辑回归结果 =====\n",
      "准确率: 0.8333\n",
      "混淆矩阵:\n",
      "[[26  6]\n",
      " [ 4 24]]\n",
      "系数: [ 2.04778176 -0.13898279]\n",
      "截距: -0.0618921861256762\n",
      "\n",
      "===== statsmodels GLM 逻辑回归结果 =====\n",
      "准确率: 0.8333\n",
      "混淆矩阵:\n",
      "[[26  6]\n",
      " [ 4 24]]\n",
      "                 Generalized Linear Model Regression Results                  \n",
      "==============================================================================\n",
      "Dep. Variable:                      y   No. Observations:                  140\n",
      "Model:                            GLM   Df Residuals:                      137\n",
      "Model Family:                Binomial   Df Model:                            2\n",
      "Link Function:                  Logit   Scale:                          1.0000\n",
      "Method:                          IRLS   Log-Likelihood:                -46.399\n",
      "Date:                Thu, 19 Jun 2025   Deviance:                       92.798\n",
      "Time:                        21:32:40   Pearson chi2:                     170.\n",
      "No. Iterations:                     6   Pseudo R-squ. (CS):             0.5145\n",
      "Covariance Type:            nonrobust                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "const         -0.0855      0.267     -0.320      0.749      -0.609       0.438\n",
      "x1             2.2979      0.371      6.193      0.000       1.571       3.025\n",
      "x2            -0.1776      0.191     -0.930      0.353      -0.552       0.197\n",
      "==============================================================================\n"
     ]
    }
   ],
   "source": [
    "# 4. 输出模型摘要和评估结果\n",
    "print(\"\\n===== sklearn 逻辑回归结果 =====\")\n",
    "print(f\"准确率: {accuracy_sklearn:.4f}\")\n",
    "print(\"混淆矩阵:\")\n",
    "print(conf_matrix_sklearn)\n",
    "print(f\"系数: {logreg_sklearn.coef_[0]}\")\n",
    "print(f\"截距: {logreg_sklearn.intercept_[0]}\")\n",
    "\n",
    "print(\"\\n===== statsmodels GLM 逻辑回归结果 =====\")\n",
    "print(f\"准确率: {accuracy_sm:.4f}\")\n",
    "print(\"混淆矩阵:\")\n",
    "print(conf_matrix_sm)\n",
    "print(result_sm.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "7acd078d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. 手动实现逻辑回归（梯度下降法）\n",
    "class LogisticRegressionManual:\n",
    "    def __init__(self, learning_rate=0.01, num_iterations=1000):\n",
    "        self.learning_rate = learning_rate\n",
    "        self.num_iterations = num_iterations\n",
    "        self.weights = None\n",
    "        self.bias = None\n",
    "    \n",
    "    def sigmoid(self, z):\n",
    "        # 实现sigmoid函数（逻辑函数）\n",
    "        return 1 / (1 + np.exp(-z))\n",
    "    \n",
    "    def fit(self, X, y):\n",
    "        # 初始化参数\n",
    "        n_samples, n_features = X.shape\n",
    "        self.weights = np.zeros(n_features)\n",
    "        self.bias = 0\n",
    "        \n",
    "        # 梯度下降\n",
    "        for _ in range(self.num_iterations):\n",
    "            # 线性预测\n",
    "            linear_model = np.dot(X, self.weights) + self.bias\n",
    "            # 应用sigmoid函数\n",
    "            y_pred = self.sigmoid(linear_model)\n",
    "            \n",
    "            # 计算梯度\n",
    "            dw = (1 / n_samples) * np.dot(X.T, (y_pred - y))\n",
    "            db = (1 / n_samples) * np.sum(y_pred - y)\n",
    "            \n",
    "            # 更新参数\n",
    "            self.weights -= self.learning_rate * dw\n",
    "            self.bias -= self.learning_rate * db\n",
    "    \n",
    "    def predict_proba(self, X):\n",
    "        # 预测概率\n",
    "        linear_model = np.dot(X, self.weights) + self.bias\n",
    "        return self.sigmoid(linear_model)\n",
    "    \n",
    "    def predict(self, X, threshold=0.5):\n",
    "        # 预测类别\n",
    "        y_pred_proba = self.predict_proba(X)\n",
    "        return (y_pred_proba >= threshold).astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "a0a6a1f4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "手动实现逻辑回归准确率: 0.8333\n",
      "手动实现逻辑回归系数: [ 1.55049481 -0.05348664]\n",
      "手动实现逻辑回归截距: -0.0018077174915733878\n"
     ]
    }
   ],
   "source": [
    "# 使用手动实现的逻辑回归\n",
    "logreg_manual = LogisticRegressionManual(learning_rate=0.01, num_iterations=1000)\n",
    "logreg_manual.fit(X_train, y_train)\n",
    "y_pred_manual = logreg_manual.predict(X_test)\n",
    "accuracy_manual = accuracy_score(y_test, y_pred_manual)\n",
    "\n",
    "print(f\"\\n手动实现逻辑回归准确率: {accuracy_manual:.4f}\")\n",
    "print(f\"手动实现逻辑回归系数: {logreg_manual.weights}\")\n",
    "print(f\"手动实现逻辑回归截距: {logreg_manual.bias}\")    "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "my_env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
